تالار های تخصصی

ساخت وبلاگ
اوراکل در نسخه 23c قابلیتی به نام JSON Relational Duality View را ارائه کرده است که می توان از طریق آن به طور همزمان از(بسیاری از) مزیتهای Relational data model و JSON data model بهرمند شد. می دانیم که انتخاب هر کدام از این دیتامدلها می تواند بر حسب شرایط، مزایا و معایبی را به همراه داشته باشد. به طور مثال در مدل Relational می توان از مزیتهایی نظیر «جلوگیری از Data duplication، نرمالسازی، consistency» و … بهره گرفت و از طرف دیگر «خوانایی، سادگی، خود توصیفی، hierarchical document» نمونه هایی از مزیتهای JSON هستند. بر اساس قابلیت JSON Relational Duality View، دیتا در جداول به صورت relational ذخیره می شوند و با ایجاد یک Duality View بر روی جداول رابطه ای، امکان دسترسی و دستکاری(Delete، Insert، Update) دیتا به صورت JSON هم به وجود خواهد آمد و Duality Viewها بر خلاف Viewهای معمولی، امکان write را بر روی جداول رابطه ای فراهم می کنند(حتی در حالت Complex View). در زمان استفاده از این قابلیت، با توجه به ذخیره شدن اطلاعات در جداول رابطه ای، دستورات SQLای متعارف برای اجرای عملیات DML کاملا معتبر هستند و در کنار آن Developer این انتخاب را دارد تا با استفاده از Duality Viewها عملیات DML را با فرمت JSON انجام دهد که این مسئله mapping راحت تر بین Application Object و Relational Table را به همراه دارد و در بعضی از موارد می تواند نیاز به convert دیتا به فرمت JSON و یا برعکس را از بین ببرد. در ادامه با ایجاد دو جدول book_tbl و author_tbl سعی خواهیم کرد نحوه کار با JSON Relational Duality View را شرح دهیم: SQL> create table book_tbl( ID number primary key, title varchar2(100), total_pages n تالار های تخصصی...
ما را در سایت تالار های تخصصی دنبال می کنید

برچسب : نویسنده : خنجی niksaleh بازدید : 49 تاريخ : سه شنبه 28 شهريور 1402 ساعت: 15:44

یکی دیگر از قابلیتهای جدید دیتابیس اوراکل در نسخه 23c، ابزار ConnStr است این ابزار خروجی لاگ listener را خوانده و بر اساس آن، برای هر کدام از سرویسها، connection string را به فرمتهای Easy Connect، JDBC و Python نمایش می دهد. علاوه بر آن، این ابزار می تواند برای هر کدام از سرویسها، net service nameای را در فایل tnsnames.ora ایجاد کند. در حالت پیش فرض اگر سرویس listener پایین باشد، اجرای دستور ConnStr به خطا خواهد خورد: [oracle@OEL8 ~]$ lsnrctl stop LSNRCTL for Linux: Version 23.0.0.0.0 - Developer-Release on 05-SEP-2023 13:30:35 Copyright (c) 1991, 2023, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST= OEL8)(PORT=1521))) The command completed successfully [oracle@OEL8 ~]$ connstr Using Listener: LISTENER with Oracle Home: /opt/oracle/product/23c/dbhomeFree No listener endpoints found بعد از استارت listener، اگر سرویسی رجیستر نشده باشد، ConnStr پیغام The listener supports no services را نمایش می دهد: [oracle@OEL8 ~]$ lsnrctl start The listener supports no services The command completed successfully [oracle@OEL8 ~]$ connstr Using Listener: LISTENER with Oracle Home: /opt/oracle/product/23c/dbhomeFree The listener supports no services همانطور که می دانید، بعد از انتظار چند ثانیه ای، LREG همه سرویسها را به صورت خودکار روی پورت 1521 رجیستر خواهد کرد: [oracle@OEL8 ~]$ lsnrctl status LSNRCTL for Linux: Version 23.0.0.0.0 - Developer-Release on 05-SEP-2023 13:36:47 Copyright (c) 1991, 2023, Oracle. All rights reserved. Connecting to (DE تالار های تخصصی...
ما را در سایت تالار های تخصصی دنبال می کنید

برچسب : نویسنده : خنجی niksaleh بازدید : 63 تاريخ : جمعه 24 شهريور 1402 ساعت: 20:09

در نسخه 21c، اوراکل'>اوراکل امکان اجرای کد JavaScript در داخل دیتابیس را فراهم کرده است. این کار با کمک بسته DBMS_MLE امکان پذیر است: DECLARE ctx varchar2(50) ; BEGIN ctx := DBMS_MLE.create_context(); DBMS_MLE.eval(ctx, 'JAVASCRIPT', q'~console.log("www.usefzadeh.com");~'); DBMS_MLE.drop_context(ctx); END; / www.usefzadeh.com در نسخه 23c قابلیتهای دیگری هم در این زمینه ارائه شد که یکی از آنها، امکان بارگذاری و استفاده از ماژولهای JavaScript در دیتابیس اوراکل است این قابلیت می تواند در زمینه های مختلفی راهگشا باشد و حجم کدنویسی را کاهش دهد. به عنوان مثال، در مطلب “قابلیت SQL domain در اوراکل 23c” در مورد محدود کردن فرمت ورودی ها از طریق check constraint، trigger و sql domain نکاتی را ارائه کردیم و توضیح دادیم که چگونه می توانیم ورودی های ستونی مثل email را کنترل کنیم تا در قالبی مشخص درج شوند. در این قبیل چالشها، ماژولهای JavaScript هم می توانند به کمک ما بیایند و با استفاده از آنها هم می توانیم بسیاری از این دست نیازمندیها را در دیتابیس مرتفع کنیم. برای مثال، ماژول validator در مورد کنترل ساختار ورودی ها می تواند مورد استفاده قرار بگیرد. در ادامه نحوه بارگذاری و استفاده از ماژول validator.js که شامل توابع متعددی هم هست را توضیح خواهیم داد(با ایده گرفتن از مقاله آقای Martin Bach). در ابتدا باید این ماژول را دانلود و روی سرور قرار دهیم. C:UsersUsef>curl -Lo validator.js https://cdn.jsdelivr.net/npm/validator@latest/+esm % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Lef تالار های تخصصی...
ما را در سایت تالار های تخصصی دنبال می کنید

برچسب : نویسنده : خنجی niksaleh بازدید : 51 تاريخ : چهارشنبه 15 شهريور 1402 ساعت: 3:21

قبلا در مطلبی توضیح دادیم که Traditional Audit در نسخه 23c پشتیبانی نمی شود به این معنی که auditهای قدیمی امکان اعمال شدن دارند ولی نمی توان audit جدیدی را ایجاد کرد. برای مثال می توانیم auditای که از قبل تنظیم شده را noaudit کنیم: SQL> noaudit all on DVSYS."REALM_AUTH$"; Noaudit succeeded. ولی امکان تنظیم مجدد این audit و یا auditهای دیگر وجود ندارد و در صورت تلاش برای این کار با خطای ORA-46401 مواجه خواهیم شد: SQL> audit all on DVSYS."REALM_AUTH$"; ORA-46401: No new traditional AUDIT configuration is allowed. Traditional auditing is desupported, and you should use unified auditing in its place. آقای Pete Finnigan که در موضوع oracle security مطالب خوبی دارند، پارامتر مخفی ای(Hidden Parameter)  را معرفی کردند که امکان فعالسازی مجدد Traditional Audit را در این نسخه فراهم می کند: SQL> alter system set "_allow_traditional_audit_configuration"=true; System altered. پس از تنظیم این پارامتر به مقدار TRUE، مجددا دستور audit فوق را اجرا می کنیم: SQL> audit all on DVSYS."REALM_AUTH$"; Audit succeeded. این نوع از  audit بدون هیچ محدودیتی، در سطوح دیگر هم قابل انجام است: SQL> audit drop any table; Audit succeeded. SQL> audit all statements; Audit succeeded. وحید یوسف زادهارائه خدمات مشاوره ، پشتیبانی و نصب و راه اندازی پایگاه داده اوراکل در سراسر کشور...................... تلفن: 09128110897 ایمیل:[email protected] تالار های تخصصی...
ما را در سایت تالار های تخصصی دنبال می کنید

برچسب : نویسنده : خنجی niksaleh بازدید : 44 تاريخ : شنبه 4 شهريور 1402 ساعت: 8:30

در نسخه 23c، اوراکل متن بعضی از خطاها را به شکل خواناتری تغییر داده تا در شناسایی علت آن و همچنین رفع سریع تر این خطاها به Developer و یا DBA کمک کرده باشد. برای مثال متن خطای معروف ORA-00979 تا قبل از نسخه 23c به صورت زیر بوده است: SQL> select owner,object_type,count(*) from dba_objects group by  owner; ORA-00979: not a GROUP BY expression اما این متن در نسخه 23c به صورت زیر تغییر کرده است: SQL> select owner,object_type,count(*) from dba_objects group by  owner; ORA-00979: “OBJECT_TYPE”: must appear in the GROUP BY clause or be used in an aggregate function در ادامه نمونه های دیگری از خطاهای معروفی که متن آنها تغییر کرده است را مشاهده می کنید. خطای ORA-00020:  –oracle 21c: ORA-00020: maximum number of processes () exceeded –oracle 23c: ORA-00020: exceeded maximum number of processes () specified in initialization parameter خطای ORA-01722: –oracle 21c: SQL> select name from v$datafile where file#=’sdf’; ORA-01722: invalid number –oracle 23c: SQL> select name from v$datafile where file#=’sdf’; ORA-01722: unable to convert string value containing ‘s’ to a number: خطای ORA-01017: –oracle 21c: ORA-01017: invalid useame/password; logon denied –oracle 23c: ORA-01017: invalid credential or not authorized; logon denied خطای ORA-12514: –Oracle 21c: [oracle@target ~]$ sqlplus “usef/[email protected]:1521/babol2” SQL*Plus: Release 21.0.0.0.0 – Production on Tue Aug 8 18:03:55 2023 ORA-12514: TNS:listener does not currently know of service requested in connect تالار های تخصصی...
ما را در سایت تالار های تخصصی دنبال می کنید

برچسب : نویسنده : خنجی niksaleh بازدید : 47 تاريخ : شنبه 4 شهريور 1402 ساعت: 8:30

در صورتی که دو کاربر قصد ویرایش یک رکورد را داشته باشند، کاربری که دیرتر دستور update را اجرا کرده Block خواهد شد و تا زمانی که کاربر اول(کاربری که زودتر رکورد را در اختیار گرفته) به تراکنش خاتمه ندهد، کاربر دوم در حالت Block باقی خواهد ماند. --session 1: SQL> select sid from v$mystat where rownum=1; SID ---------- 2190 SQL> update USEF.TBL1 set id=1; 1 row updated --session 2: SQL> select sid from v$mystat where rownum=1; SID ---------- 944 SQL> update USEF.TBL1 set id=1; Executing… بلاک شدن session دوم را می توانیم از طریق دستور زیر ببینیم: SQL> select SID,ID1,ID2,LMODE,block,request from v$lock where type='TX'; SID ID1 ID2 LMODE BLOCK REQUEST ---------- ---------- ---------- ---------- ---------- ---------- 944 458766 2511 0 0 6 2190 458766 2511 6 1 0 ممکن است کاربر دوم که تراکنشش در حالت انتظار قرار دارد، برای ما اولویت بیشتری داشته باشد. در این حالت چه راهکاری وجود دارد؟اوراکل در نسخه 23c با ارائه چند پارامتر این مسئله را قابل کنترل کرده است و این امکان را فراهم کرده تا اگر تراکنشهای با اولویت پایین، سد راه تراکنشهای با اولویت بالا شوند، به صورت خودکار و با گذراندن زمان مشخصی، تراکنشهای با اولویت کمتر rollback شوند. پارامترهای مربوط به قابلیت Automatic transaction rollback را در قسمت زیر مشاهده می کنید: txn_priority string HIGH txn_auto_rollback_mode تالار های تخصصی...
ما را در سایت تالار های تخصصی دنبال می کنید

برچسب : نویسنده : خنجی niksaleh بازدید : 52 تاريخ : شنبه 4 شهريور 1402 ساعت: 8:30

خبرنامه